package com.ruoyi.ap.service.impl;

import com.ruoyi.ap.domain.Product;
import com.ruoyi.ap.mapper.ProductMapper;
import com.ruoyi.ap.pojo.vo.ProductVo;
import com.ruoyi.ap.service.IProductService;
import com.ruoyi.common.core.domain.TreeSelect;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 产品Service业务层处理
 *
 * @author HuaQP
 * @date 2023-09-11
 */
@Service
public class ProductServiceImpl implements IProductService {
    @Resource
    private ProductMapper productMapper;

    /**
     * 查询产品
     *
     * @param id 产品主键
     * @return 产品
     */
    @Override
    public Product selectProductById(Long id) {
        return productMapper.selectProductById(id);
    }

    /**
     * 查询产品列表
     *
     * @param product 产品
     * @return 产品
     */
    @Override
    public List<ProductVo> selectProductList(ProductVo product) {
        return productMapper.selectProductList(product);
    }

    /**
     * 新增产品
     *
     * @param product 产品
     * @return 结果
     */
    @Override
    public int insertProduct(Product product) {
        product.setCreateTime(DateUtils.getNowDate());
        return productMapper.insertProduct(product);
    }

    /**
     * 修改产品
     *
     * @param product 产品
     * @return 结果
     */
    @Override
    public int updateProduct(Product product) {
        product.setUpdateTime(DateUtils.getNowDate());
        return productMapper.updateProduct(product);
    }

    /**
     * 批量删除产品
     *
     * @param ids 需要删除的产品主键
     * @return 结果
     */
    @Override
    public int deleteProductByIds(Long[] ids) {
        return productMapper.deleteProductByIds(ids);
    }

    /**
     * 删除产品信息
     *
     * @param id 产品主键
     * @return 结果
     */
    @Override
    public int deleteProductById(Long id) {
        return productMapper.deleteProductById(id);
    }

    // 查询产品树结构信息
    @Override
    public List<TreeSelect> selectProductTreeList() {
        ProductVo productVo = new ProductVo();
        List<ProductVo> productVoList = productMapper.selectProductList(productVo);

        //产品分类列表
        List<TreeSelect> listTree = productVoList.stream().map(item -> new TreeSelect(item.getCategoryId(), item.getCategoryName()))
                .collect(Collectors.toList()).stream().distinct().collect(Collectors.toList());
        //每个产品中的分类生成产品叶节点
        for (TreeSelect node : listTree) {
            for (ProductVo item : productVoList) {
                if (node.getId().equals(item.getCategoryId())) {
                    node.getChildren().add(new TreeSelect(item.getId(), item.getName()));
                }
            }
        }
        return listTree;
    }
}
